package org.imple;

import org.dao.UserDao;
import org.entity.User;
import org.util.DButil;


import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Date;


public class UserImple implements UserDao {

    public int addUser(User u) {

        int r = 0 ;

        // 第一：定义要操作数据库的SQL语句
        // ctrl + shift + u
        String sql = "insert into tbl_user (name,pass,sex,age) values (?,?,?,?)" ;

        // 第二：获取连接对象
        Connection conn = DButil.getConnection() ;
        PreparedStatement pstmt = null ;

        // 第三：预编译SQL语句并返回语句对象
        try {
            pstmt = conn.prepareStatement(sql) ;
            // 第四：填充参数（占位符）
            // 语句对象.setXxx(占位符下标索引,数据) ;
            // 其中，Xxx指是字段对应的数据类型
            pstmt.setString(1,u.getName()) ;
            pstmt.setString(2,u.getPass()) ;
            pstmt.setString(3,u.getSex()) ;
            pstmt.setInt(4,u.getAge()) ;

            // 第五：执行SQL语句
            // 整数 变量 = 语句对象.executeUpdate() ; // 执行增、删、改操作，返回受影响的行数
            // ResultSet rst = 语句对象.executeQuery() ; // 执行查询操作，返回查询数据的结果，我们需要对此结果进行封装(List)
            r = pstmt.executeUpdate() ;

            // 第六：处理结果
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            // 第七：关闭相关对象
            DButil.close(null,pstmt,conn);
        }

        return r;
    }



    /**
     * 查询
     * @return
     */
    public User findUser(String name,String pass) {
        User u = null ;

        String sql = "select id,name,pass,sex,age,reg_time from tbl_user where name=? and pass=?" ;

        Connection conn = DButil.getConnection() ;
        PreparedStatement pstmt = null ;

        ResultSet rst = null ;
        try {
             pstmt = conn.prepareStatement(sql) ;

             pstmt.setString(1,name);
             pstmt.setString(2,pass);

             rst = pstmt.executeQuery() ;

             if(rst.next()){
                int id = rst.getInt(1) ;
                String sex = rst.getString(4) ;
                int age = rst.getInt(5) ;
                Date regTime = rst.getDate(6) ;

                u = new User() ;
                u.setId(id);
                u.setName(name);
                u.setSex(sex);
                u.setAge(age);
                u.setRegTime(regTime);
             }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }finally {
            DButil.close(rst,pstmt,conn);
        }

        return u;
    }
}
